home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / etc / gdm / failsafeXinit < prev    next >
Text File  |  2009-03-26  |  9KB  |  223 lines

  1. #!/bin/bash
  2. # This provides a stripped down 'failsafe' mode for situations
  3. # where X is failing to start up.
  4.  
  5. # Author: Bryce W. Harrington <bryce@canonical.com>
  6.  
  7. # Copyright 2007, 2008 Canonical, Ltd
  8. #
  9. # This is free software; you may redistribute it and/or modify
  10. # it under the terms of the GNU General Public License as
  11. # published by the Free Software Foundation; either version 2,
  12. # or (at your option) any later version.
  13. #
  14. # This is distributed in the hope that it will be useful, but
  15. # WITHOUT ANY WARRANTY; without even the implied warranty of
  16. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. # GNU General Public License for more details.
  18. #
  19. # You should have received a copy of the GNU General Public License with
  20. # the Debian operating system, in /usr/share/common-licenses/GPL;  if
  21. # not, write to the Free Software Foundation, Inc., 59 Temple Place,
  22. # Suite 330, Boston, MA 02111-1307 USA
  23.  
  24. xorg_conf=$1
  25. with_gdm=$2
  26.  
  27. display=0
  28. xorg_log="/var/log/Xorg.${display}.log"
  29. gdm_log="/var/log/gdm/:${display}.log"
  30. gdm_log_1="/var/log/gdm/:${display}.log.1"
  31. gdm_log_2="/var/log/gdm/:${display}.log.2"
  32. apport_hook="/usr/share/apport/xserver_hook"
  33.  
  34. app_width=600
  35. app_height=300
  36. app_title="$(gettext 'Ubuntu Failsafe-X')"
  37.  
  38. timestamp=$(date +%y%m%d%H%M%S)
  39.  
  40. display_main_menu() {
  41.     zenity --list \
  42.         --radiolist \
  43.         --title "$app_title" \
  44.         --width $app_width --height $app_height \
  45.         --text "$(gettext 'What would you like to do?')" \
  46.         --column "" --column "$(gettext 'Choice')" --column "" \
  47.           TRUE   LOW_RES_MODE "$(gettext 'Run Ubuntu in low-graphics mode for just one session')" \
  48.           FALSE  RECONFIGURE "$(gettext 'Reconfigure graphics')" \
  49.           FALSE  TROUBLESHOOT "$(gettext 'Troubleshoot the error')" \
  50.           FALSE  EXIT_TO_CONSOLE "$(gettext 'Exit to console login')" \
  51.         --hide-column 2
  52.  
  53. # TODO:          3 FILE_BUG "Report a bug about this failure" \
  54. }
  55.  
  56. display_reconfigure_menu() {
  57.     # TODO:  Only display SELECT_BACKUP if backups are available
  58.  
  59.     zenity --list \
  60.         --radiolist \
  61.         --title "$app_title : $(gettext 'Reconfiguration')" \
  62.         --text "$(gettext 'How would you like to reconfigure your display?')" \
  63.         --width $app_width --height $app_height \
  64.         --column "" --column "$(gettext 'Choice')" --column "" \
  65.           TRUE   RUN_DEXCONF "$(gettext 'Use default (generic) configuration')" \
  66.           FALSE  RUN_XORGCONF "$(gettext 'Create new configuration for this hardware')" \
  67.           FALSE  SELECT_BACKUP "$(gettext 'Use your backed-up configuration')" \
  68.         --hide-column 2
  69. }
  70.  
  71. display_troubleshooting_menu() {
  72.     zenity --list \
  73.         --radiolist \
  74.         --title "$app_title : $(gettext 'Troubleshooting')" \
  75.         --text "$(gettext 'What information would you like to review?')" \
  76.         --width $app_width --height $app_height \
  77.         --column "" --column "$(gettext 'Choice')" --column "" \
  78.           TRUE   VIEW_XORG_LOG "$(gettext 'Review the xserver log file')" \
  79.           FALSE  VIEW_GDM_LOG  "$(gettext 'Review the startup errors')" \
  80.           FALSE  EDIT_CONFIG   "$(gettext 'Edit configuration file')" \
  81.           FALSE  SAVE_CONFIG_LOGS   "$(gettext 'Archive configuration and logs')" \
  82.         --hide-column 2
  83. # TODO:          5 VERIFY_XORGCONF "Check configuration file"
  84. }
  85.  
  86. # TODO:  Should we just go ahead and file a bug for them without presenting an option?
  87. display_filebug_menu() {
  88.     # Run apport to file a bug
  89.     if [ -e $apport_hook ]; then
  90.         $apport_hook
  91.         if [ $? == 0 ]; then
  92.             zenity --info --text "$(gettext 'A bug report has been written.\nYou can send it next time you log in.')"
  93.         else
  94.             zenity --error --text "$(gettext 'Your bug could not be recorded successfully.\n')"
  95.         fi
  96.     else
  97.         zenity --error --text "$(gettext 'Cannot file bug:  $apport_hook is not present.')"
  98.     fi
  99. }
  100.  
  101. backup_xorg_conf() {
  102.     # TODO: backup xorg.conf more elegantly...
  103.     xorg_conf_backup="/etc/X11/xorg.conf-backup-${timestamp}"
  104.     cp /etc/X11/xorg.conf ${xorg_conf_backup}
  105.     if [ $? != 0 ]; then
  106.         return zenity --question --text "$(gettext 'Your config could not be backed up.\nDo you want to continue anyway?\n')"
  107.     fi
  108. }
  109.  
  110. run_dexconf() {
  111.     backup_xorg_conf || return 1
  112.  
  113.     dexconf
  114.     if [ $? == 0 ]; then
  115.         zenity --info --text "$(gettext 'Your configuration has been restored to default,\nand your old configuration backed up.\nPlease restart.\n')"
  116.     else
  117.         # TODO:  Copy $xorg_conf_backup to $xorg_conf if it exists
  118.         zenity --error --text "$(gettext 'Failure restoring configuration to default.\nYour config has not been changed.')"
  119.     fi
  120. }
  121.  
  122. run_xorgconf() {
  123.     backup_xorg_conf || return 1
  124.  
  125.     Xorg :99 -configure
  126.     if [ $? == 0 ]; then
  127.         zenity --info --text "$(gettext 'A new configuration has been generated,\nand your old configuration backed up.\nPlease restart.\n')"
  128.     else
  129.         zenity --error --text "$(gettext 'Could not generate a new configuration')"
  130.     fi
  131. }
  132.  
  133. view_xorg_log() {
  134.     zenity --text-info --filename=$xorg_log --width=640 --height=480
  135. }
  136.  
  137. view_gdm_log() {
  138.     zenity --text-info --filename=${gdm_log_1} --width=640 --height=480
  139. }
  140.  
  141. verify_xorgconf() {
  142.     # Run Alberto's xorg.conf checker (once it's available in main)
  143.     zenity --error --text "$(gettext 'Sorry, this option is not implemented yet')"
  144. }
  145.  
  146. edit_config() {
  147.     backup_xorg_conf || return 1
  148.  
  149.     xorg_conf_tmp=$(mktemp -t xorg.conf.XXXXXXXX)
  150.     zenity --text-info --editable --filename=/etc/X11/xorg.conf --width=640 --height=480 > "${xorg_conf_tmp}" && mv "${xorg_conf_tmp}" /etc/X11/xorg.conf
  151.     chmod 644 /etc/X11/xorg.conf
  152. }
  153.  
  154. save_config_logs() {
  155.     xorg_backup_name=failsafeX-backup-${timestamp}
  156.     xorg_backup_dir=$(mktemp -d -t ${xorg_backup_name}.XXX)
  157.     xorg_backup_file=/var/log/${xorg_backup_name}.tar
  158.  
  159.     # cp $xorg_conf $xorg_backup_dir
  160.     cp /etc/X11/xorg.conf $xorg_backup_dir
  161.     cp ${xorg_log} $xorg_backup_dir
  162.     cp ${xorg_log}.old $xorg_backup_dir
  163.     cp ${gdm_log} $xorg_backup_dir
  164.     cp ${gdm_log_1} $xorg_backup_dir
  165.     cp ${gdm_log_2} $xorg_backup_dir
  166.     lspci -vvnn > ${xorg_backup_dir}/lspci-vvnn.txt
  167.     xrandr --verbose > ${xorg_backup_dir}/xrandr-verbose.txt
  168.     tar -cf ${xorg_backup_file} ${xorg_backup_dir}
  169.     rm -rf ${xorg_backup_dir}
  170.  
  171.     zenity --info --text "$(gettext 'Relevant configuration and log files have been saved to:\n')"$xorg_backup_file"\n$(gettext 'Bug reports can be submitted at http://www.launchpad.net/ubuntu/.\n')"
  172. }
  173.  
  174. # Scan Xorg.0.log for errors
  175. LOG_ERRORS=$(grep -e "^(EE)" $xorg_log)
  176.  
  177. if [ -z "$LOG_ERRORS" ]; then
  178.     zenity --warning --text "$(gettext '<big><b>Ubuntu is running in low-graphics mode</b></big>\n\nYour screen, graphics card, and input device settings\ncould not be detected correctly.  You will need to configure these yourself.')"
  179. else
  180.     zenity --warning --text "$(gettext '<big><b>Ubuntu is running in low-graphics mode</b></big>\n\nThe following error was encountered.  You may need\nto update your configuration to solve this.\n\n')""${LOG_ERRORS}"
  181. fi
  182.  
  183. # TODO: Add --window-icon "$app_icon" to all zenity windows
  184.  
  185. while : ; do
  186.     case "$choice" in
  187.         ## Main Menu ##
  188.         LOW_RES_MODE )    with_gdm="low-res"; break ;;
  189.         RECONFIGURE )     choice=$(display_reconfigure_menu) ;;
  190.         TROUBLESHOOT )    choice=$(display_troubleshooting_menu) ;;
  191.         FILE_BUG )        choice=$(display_filebug_menu) ;;
  192.  
  193.         ## Reconfigure Menu ##
  194.         RUN_DEXCONF )     choice="RECONFIGURE"; run_dexconf ;;
  195.         RUN_XORGCONF )    choice="RECONFIGURE"; run_xorgconf ;;
  196.         SELECT_BACKUP )   choice="RECONFIGURE"; ;;
  197.  
  198.         ## Troubleshooting Menu ##
  199.         VIEW_XORG_LOG )   choice="TROUBLESHOOT"; view_xorg_log ;;
  200.         VIEW_GDM_LOG )    choice="TROUBLESHOOT"; view_gdm_log ;;
  201.         VERIFY_XORGCONF ) choice="TROUBLESHOOT"; verify_xorgconf ;;
  202.         EDIT_CONFIG )     choice="TROUBLESHOOT"; edit_config ;;
  203.         SAVE_CONFIG_LOGS ) choice="TROUBLESHOOT"; save_config_logs ;;
  204.         EXIT_TO_CONSOLE ) with_gdm=""; break ;;
  205.  
  206.         EXIT )          break ;;
  207.         *)              choice=$(display_main_menu) || break ;;
  208.     esac
  209. done
  210.  
  211. if [ "x$with_gdm" = "xwith-gdm" ]; then
  212.     export XORGCONFIG="/etc/X11/xorg.conf"
  213. elif [ "x$with_gdm" = "xlow-res" ]; then
  214.     export XORGCONFIG=${xorg_conf}
  215. else
  216.     chvt 2
  217.     exit
  218. fi
  219.  
  220. /etc/init.d/gdm restart | \
  221.     zenity --progress --pulsate --text "$(gettext 'Stand by one minute while the display restarts...')"
  222.  
  223.